Virtualization technologies have become widely used for sharing limited computer hardware resources. In a hardware virtualization environment, sometimes also referred to as a platform virtualization environment, one or more virtual machines can simulate a host computer with its own operating system. In particular, software executed on these virtual machines can be separated from the underlying hardware resources. As a result, virtual machines running on a same host computer can each have its own operating system. For example, a computer that is running Microsoft Windows operating system may host a virtual machine that simulates a computer running a Linux operating system, based on which Linux-based software can be executed.
Additionally, virtualization technologies can provide remote access to computer resources across public or private networks. Users can use a variety of clients to access a virtual desktop or applications running on a host computer in the virtualized environment. These clients can be directly connected to the host computer or they can connect to the virtualized environment through a public or private network. The client can capture user input and transfer it across the network to the host computer's virtual environment. The application can then provide a response to the client providing an experience similar to if the user were interacting directly with the application.
For some types of user input devices, such as those connected through a USB interface, the application is responsible for periodically requesting updated input device data from the input device. The application will read the input device data, wait a polling period specified by the input device, and then read more input device data. These types of user input devices can store the most recently provided data. When new data is provided, the input device must overwrite existing data. By adjusting their polling frequency to the frequency at which the input device provides data, applications can read the device data after it is updated and before the device provides new data ensuring that all data from the input device is captured by the application.
The use of virtualization in combination with remote clients can introduce a public or private network into the communication path between the application and the user input device connected to the client. In a virtual platform, the application runs on the host server while the user input device is connected to the remote client. The host server can send a request to the remote client to capture the input device data, and the client can respond sending the current input device data to the host application. In this type of environment, the host application is responsible for the frequency of requests sent to the client. The host will only request additional input device data after receiving a response from the client, and the client will only send the current device data when the client receives the request from the host.
As data travels through a network, various factors can cause a delay between the time the data is sent and the time the data is received. This delay is referred to as network latency. In networks with very low network latency, the request and response cycle usually occurs without any interruption in user experience because the entire cycle occurs faster than the polling frequency of the client. As network latency increases and requests for data stop reaching the client before new input device data is provided, the new input device data replaces the existing input device data before the client can send the existing input device data to the host. The data that is overwritten is lost. This data loss can significantly degrade the user experience.